package algorithm.list;

public class reverseList {
    public static void main(String[] args) {
        int i = 1,j;
        j = i;
        System.out.println("i="+i+",j="+j);
    }
    /**
     * 递归
     * @param head
     * @return
     */
    public ListNode reverseList(ListNode   head){
        if (head == null){
            return null;
        }

        ListNode finalHead = null;//用来链表逆置后的头节点

        ListNode nextHead = head.next;//保存当前节点的下一个节点

        head.next = null;//将当前节点的next指针置空，消除以前的正向依赖

        if (nextHead != null){//如果下一个节点还存在

            finalHead = reverseList(nextHead);//此时需要将下一个节点逆置，逆置后得到的头节点就是全局逆置后的头节点。

            nextHead.next = head;//将之前保存的节点的下一个节点.next连接到当前节点，完成逆置
        } else {//下一个节点不存在，说明当前节点已经是末尾节点，

            finalHead = head;//把当前节点作为全局逆置后的全节点
        }

        return finalHead;//逆置完成，返回全局逆置后的头节点
    }

    /**
     * 迭代
     * 1，2，3
     * 3，2，1
     * @，param head
     * @return
     */
    public static ListNode iterate(ListNode head){
        ListNode prev = null;//前一个节点
        ListNode curr = head;//当前节点
        ListNode next = null;//后面的节点
        while (curr != null){//如果当前节点不为空，则循环
            next = curr.next;//当前节点的next节点赋值给下一个节点的值
            curr.next = prev;//当前节点的前一个节点的值赋值给当前节点的next节点
            prev = curr;//当前节点的值赋给前一个节点值
            curr = next;//把下一个节点的值赋给当前节点
        }

        return prev;//
    }
}
